O index, invés de local index = data[math.random(#data)] não deveria ser local index = math.random(#data)? Da primeira forma me parece que vai sortear e atribuir a variável index a tabela com os valores de x, y e z, não o index.
Se eu não tiver brisando acho que deveria ficar de um dos dois jeitos essa parte:
local index = data[math.random(#data)]
x, y, z = index[1], index[2], index[3]
OU
local index = math.random(#data)
x, y, z = data[index][1], data[index][2], data[index][3]